package com.comment.pojo.domain.bag;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler;
import com.comment.exception.ServiceException;
import com.comment.pojo.domain.logic.core.CoreProp;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.extern.slf4j.Slf4j;

/**
 * 背包单元格(BagItem)表实体类
 *
 * @author cxy
 * @since 2024-11-13 16:06:10
 */
@Slf4j
@ApiModel("背包单元格")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(autoResultMap = true)
@EqualsAndHashCode(callSuper = true)
public class BagItem extends Model<BagItem> {// swagger2,mybatis-plus
    ///////////////////////////////////////////////////////////////////////////////////////////////////////// 生成实体字段
    @TableId(type = IdType.AUTO)
    @ApiModelProperty("id")
    private Long id;

    @ApiModelProperty("账号uid")
    private Long uid;

    @ApiModelProperty("道具id")
    private Long corePropId;

    @ApiModelProperty("数量")
    public BigDecimal num;

    @ApiModelProperty("单元格状态: 0.空闲 1.正常 2.饱和 3.操作中(操作中的单元格在处理完业务回归正常) -2:负债")
    private Integer status;

    @ApiModelProperty("道具状态: 0.空闲 1.使用中")
    private Integer propStatus;


    @TableField(typeHandler = Fastjson2TypeHandler.class)
    @ApiModelProperty("扩展信息")
    public Map<String, Object> extend;

    ///////////////////////////////////////////////////////////////////////////////////////////////////////// 序列化版本号
    @TableField(exist = false)
    private static final long serialVersionUID = -91232201043903474L;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////// 获取主键值
    @Override
    public Serializable pkVal() {
        return this.id;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////// 非数据库字段
    /////////////////////////////////////////////////////////////////////////////////////////////////////////    领域业务
    public void checkCellStatus(CoreProp cache) {
        if (status != 3) {
            Long stack = cache.getStack();
            if (stack == 0) {
                status = 1;
            }else {
                if (num.compareTo(BigDecimal.valueOf(stack)) > 0) {
                    status = 2;
                }else {
                    status = 1;
                }
            }
        }
    }

    public void clear() {
        this.corePropId = 0L;
        this.num = BigDecimal.ZERO;
        this.status = 0;
        this.propStatus = 0;
    }

    public void obtainHandlerPower() {
        if (status == 3) {
            throw new ServiceException("点击过快请等待");
        }
        status = 3;
    }
    public void giveUpHandlerPower() {
        if (status == 3) {
            status = 1;

        }
    }

    public void init() {
        corePropId = 0L;
        num = BigDecimal.ZERO;
        status = 0;
        propStatus = 0;
        extend = new HashMap<>();
    }
}

